Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
64.86% |
24 / 37 |
CRAP | |
71.13% |
69 / 97 |
| Family | |
0.00% |
0 / 1 |
|
64.86% |
24 / 37 |
124.14 | |
71.13% |
69 / 97 |
| __construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
5 / 5 |
|||
| __toString | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 1 |
|||
| getId | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| getCreated | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 1 |
|||
| setCreated | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
| getUpdated | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 1 |
|||
| setUpdated | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
| getCode | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| setCode | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| addAttribute | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
| removeAttribute | |
0.00% |
0 / 1 |
2.06 | |
75.00% |
3 / 4 |
|||
| getAttributes | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| getAttributeCodes | |
100.00% |
1 / 1 |
2 | |
100.00% |
4 / 4 |
|||
| getGroupedAttributes | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 4 |
|||
| hasAttribute | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| hasAttributeCode | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| setAttributeAsLabel | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| getAttributeAsLabel | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| setAttributeAsImage | |
100.00% |
1 / 1 |
2 | |
100.00% |
2 / 2 |
|||
| getAttributeAsImage | |
100.00% |
1 / 1 |
2 | |
100.00% |
1 / 1 |
|||
| getAttributeAsLabelChoices | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 6 |
|||
| setLocale | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| getTranslations | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| getTranslation | |
0.00% |
0 / 1 |
5.01 | |
91.67% |
11 / 12 |
|||
| addTranslation | |
100.00% |
1 / 1 |
2 | |
100.00% |
3 / 3 |
|||
| removeTranslation | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| getTranslationFQCN | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| getLabel | |
100.00% |
1 / 1 |
4 | |
100.00% |
2 / 2 |
|||
| setLabel | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
| addAttributeRequirement | |
100.00% |
1 / 1 |
2 | |
100.00% |
7 / 7 |
|||
| removeAttributeRequirement | |
100.00% |
1 / 1 |
1 | |
100.00% |
2 / 2 |
|||
| setAttributeRequirements | |
0.00% |
0 / 1 |
6.00 | |
0.00% |
0 / 4 |
|||
| getAttributeRequirements | |
100.00% |
1 / 1 |
2 | |
100.00% |
5 / 5 |
|||
| getAttributeRequirementKey | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
| getReference | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 1 |
|||
| getFamilyVariants | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
| setFamilyVariants | |
0.00% |
0 / 1 |
2.00 | |
0.00% |
0 / 2 |
|||
| <?php | |
| namespace Akeneo\Pim\Structure\Component\Model; | |
| use Akeneo\Pim\Structure\Component\AttributeTypes; | |
| use Akeneo\Tool\Component\Localization\Model\TranslationInterface; | |
| use Doctrine\Common\Collections\ArrayCollection; | |
| use Doctrine\Common\Collections\Collection; | |
| /** | |
| * Family entity | |
| * | |
| * @author Filips Alpe <filips@akeneo.com> | |
| * @copyright 2013 Akeneo SAS (http://www.akeneo.com) | |
| * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) | |
| */ | |
| class Family implements FamilyInterface | |
| { | |
| /** @var int */ | |
| protected $id; | |
| /** @var string */ | |
| protected $code; | |
| /** @var Collection */ | |
| protected $attributes; | |
| /** | |
| * Used locale to override Translation listener's locale | |
| * this is not a mapped field of entity metadata, just a simple property | |
| * | |
| * @var string | |
| */ | |
| protected $locale; | |
| /** @var Collection */ | |
| protected $translations; | |
| /** @var AttributeInterface */ | |
| protected $attributeAsLabel; | |
| /** @var AttributeInterface */ | |
| protected $attributeAsImage; | |
| /** @var Collection */ | |
| protected $requirements; | |
| /** @var \DateTime */ | |
| protected $created; | |
| /** @var \DateTime */ | |
| protected $updated; | |
| /** @var Collection */ | |
| protected $familyVariants; | |
| /** | |
| * Constructor | |
| */ | |
| public function __construct() | |
| { | |
| $this->attributes = new ArrayCollection(); | |
| $this->translations = new ArrayCollection(); | |
| $this->requirements = new ArrayCollection(); | |
| $this->familyVariants = new ArrayCollection(); | |
| } | |
| /** | |
| * Returns the label of the family | |
| * | |
| * @return string | |
| */ | |
| public function __toString() | |
| { | |
| return $this->getLabel(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getId() | |
| { | |
| return $this->id; | |
| } | |
| /** | |
| * Get created datetime | |
| * | |
| * @return \DateTime | |
| */ | |
| public function getCreated() | |
| { | |
| return $this->created; | |
| } | |
| /** | |
| * Set created datetime | |
| * | |
| * @param \DateTime $created | |
| * | |
| * @return Family | |
| */ | |
| public function setCreated($created) | |
| { | |
| $this->created = $created; | |
| return $this; | |
| } | |
| /** | |
| * Get updated datetime | |
| * | |
| * @return \DateTime | |
| */ | |
| public function getUpdated() | |
| { | |
| return $this->updated; | |
| } | |
| /** | |
| * Set updated datetime | |
| * | |
| * @param \DateTime $updated | |
| * | |
| * @return Family | |
| */ | |
| public function setUpdated($updated) | |
| { | |
| $this->updated = $updated; | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getCode() | |
| { | |
| return $this->code; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setCode($code) | |
| { | |
| $this->code = $code; | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function addAttribute(AttributeInterface $attribute) | |
| { | |
| if (!$this->attributes->contains($attribute)) { | |
| $this->attributes->add($attribute); | |
| } | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| * | |
| * @throws \InvalidArgumentException | |
| */ | |
| public function removeAttribute(AttributeInterface $attribute) | |
| { | |
| if (AttributeTypes::IDENTIFIER === $attribute->getType()) { | |
| throw new \InvalidArgumentException('Identifier cannot be removed from a family.'); | |
| } | |
| $this->attributes->removeElement($attribute); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getAttributes() | |
| { | |
| return $this->attributes; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getAttributeCodes() | |
| { | |
| $codes = []; | |
| foreach ($this->attributes as $attribute) { | |
| $codes[] = $attribute->getCode(); | |
| } | |
| return $codes; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getGroupedAttributes() | |
| { | |
| $result = []; | |
| foreach ($this->attributes as $attribute) { | |
| $result[(string) $attribute->getGroup()][] = $attribute; | |
| } | |
| return $result; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function hasAttribute(AttributeInterface $attribute) | |
| { | |
| return $this->hasAttributeCode($attribute->getCode()); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function hasAttributeCode($attributeCode) | |
| { | |
| return in_array($attributeCode, $this->getAttributeCodes()); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setAttributeAsLabel(AttributeInterface $attributeAsLabel) | |
| { | |
| $this->attributeAsLabel = $attributeAsLabel; | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getAttributeAsLabel() | |
| { | |
| return $this->attributeAsLabel; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setAttributeAsImage(?AttributeInterface $attributeAsImage): FamilyInterface | |
| { | |
| $this->attributeAsImage = $attributeAsImage; | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getAttributeAsImage(): ?AttributeInterface | |
| { | |
| return $this->attributeAsImage; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getAttributeAsLabelChoices() | |
| { | |
| return $this->attributes->filter( | |
| function ($attribute) { | |
| return in_array( | |
| $attribute->getType(), | |
| [AttributeTypes::TEXT, AttributeTypes::IDENTIFIER] | |
| ); | |
| } | |
| )->toArray(); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setLocale($locale) | |
| { | |
| $this->locale = $locale; | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getTranslations() | |
| { | |
| return $this->translations; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getTranslation($locale = null) | |
| { | |
| $locale = ($locale) ? $locale : $this->locale; | |
| if (null === $locale) { | |
| return null; | |
| } | |
| foreach ($this->getTranslations() as $translation) { | |
| if ($translation->getLocale() == $locale) { | |
| return $translation; | |
| } | |
| } | |
| $translationClass = $this->getTranslationFQCN(); | |
| $translation = new $translationClass(); | |
| $translation->setLocale($locale); | |
| $translation->setForeignKey($this); | |
| $this->addTranslation($translation); | |
| return $translation; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function addTranslation(TranslationInterface $translation) | |
| { | |
| if (!$this->translations->contains($translation)) { | |
| $this->translations->add($translation); | |
| } | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function removeTranslation(TranslationInterface $translation) | |
| { | |
| $this->translations->removeElement($translation); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getTranslationFQCN() | |
| { | |
| return FamilyTranslation::class; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getLabel() | |
| { | |
| $translated = $this->getTranslation() ? $this->getTranslation()->getLabel() : null; | |
| return ($translated !== '' && $translated !== null) ? $translated : '['.$this->getCode().']'; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setLabel($label) | |
| { | |
| $this->getTranslation()->setLabel($label); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function addAttributeRequirement(AttributeRequirementInterface $requirement) | |
| { | |
| $requirementKey = $this->getAttributeRequirementKey($requirement); | |
| $requirements = $this->getAttributeRequirements(); | |
| if (!isset($requirements[$requirementKey])) { | |
| $requirement->setFamily($this); | |
| $this->requirements->add($requirement); | |
| } else { | |
| $requirements[$requirementKey]->setRequired($requirement->isRequired()); | |
| } | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function removeAttributeRequirement(AttributeRequirementInterface $requirement) | |
| { | |
| $this->requirements->removeElement($requirement); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setAttributeRequirements(array $requirements) | |
| { | |
| foreach ($requirements as $requirement) { | |
| $requirement->setFamily($this); | |
| } | |
| $this->requirements = new ArrayCollection($requirements); | |
| return $this; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getAttributeRequirements() | |
| { | |
| $result = []; | |
| foreach ($this->requirements as $requirement) { | |
| $key = $this->getAttributeRequirementKey($requirement); | |
| $result[$key] = $requirement; | |
| } | |
| return $result; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getAttributeRequirementKey(AttributeRequirementInterface $requirement) | |
| { | |
| return sprintf( | |
| '%s_%s', | |
| $requirement->getAttributeCode(), | |
| $requirement->getChannelCode() | |
| ); | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getReference() | |
| { | |
| return $this->code; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function getFamilyVariants(): Collection | |
| { | |
| return $this->familyVariants; | |
| } | |
| /** | |
| * {@inheritdoc} | |
| */ | |
| public function setFamilyVariants(Collection $familyVariants): void | |
| { | |
| $this->familyVariants = $familyVariants; | |
| } | |
| } |